package com.hyw.encryption.service;

import java.util.Optional;

import com.hyw.encryption.keystore.dto.UserKeyStoreDTO;

/**
 * 定义基于用户的一个KeyStore的各种操作
 * 
 * @author Hongyu
 */
public interface IUserKeyStoreService {

  /**
   * 移除用户对应的keystore
   * 
   * @param userId
   *          return 如果对应的keystore存在，则返回true，反之为false
   */
  public boolean remove(String userId);

  /**
   * 判断是否属于匿名/游客账户，行为上默认为全量正式用户
   * 
   * @param userId
   * @return
   */
  public default boolean isAnonymous(String userId) {
    return false;
  }

  /**
   * 创建或者刷新用户的KeyStore
   * 
   * @param keystore
   */
  public void save(UserKeyStoreDTO keystore);

  /**
   * 加载用户的KeyStore
   * 
   * @param userId
   * @return
   */
  public Optional<UserKeyStoreDTO> load(String userId);

  /**
   * 根据用户ID生成一套RSA公钥和私钥.
   * <li>服务端这边使用公钥加密时，算法为：MD5withRSA
   * <li>服务端这边使用秘角解密时，算法为：RSA/ECB/PKCS1Padding
   * <p>
   * 意味着客户端对接时，也需要与算法保持一致
   * 
   * @param uid
   * @return 其中s[0]为公钥, s[1]为私钥
   */
  public String[] generateKeyPair(String uid);

  /**
   * 根据用户ID生成一个AES加密Key
   * 
   * @param uid
   * @return
   */
  public String generateAESKey(String uid);

}
